﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using StructureMap;

namespace KingSite.Shop.WebPortal {
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801

    public class MvcApplication : System.Web.HttpApplication {
        public static void RegisterRoutes(RouteCollection routes) {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Goods",
                "{controller}/{id}",
                new { controller = "Goods", action = "Detail", id = "" },
                new { id = @"\d" }
            );

            routes.MapRoute(
                "GoodsEvaluation",
                "{controller}/{id}",
                new { controller = "GoodsEvaluation", action = "Detail", id = "" },
                new { id = @"\d" }
            );


            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

        }

        protected void Application_Start() {
            ViewEngines.Engines.Clear();
            AreaRegistration.RegisterAllAreas();
            RegisterRoutes(RouteTable.Routes);
            //DI Stuff
            Bootstrapper.ConfigureStructureMap();

            ControllerBuilder.Current.SetControllerFactory(
                new StructureMapControllerFactory()
                );
            
        }
    }

    public class StructureMapControllerFactory : DefaultControllerFactory {
        protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) {

            IController result = null;
            try {
                result = ObjectFactory.GetInstance(controllerType) as Controller;

            }
            catch (StructureMapException) {
                System.Diagnostics.Debug.WriteLine(ObjectFactory.WhatDoIHave());
                throw;
            }

            return result;
        }
    }
}